package com.xiaotu.schedule;

import cn.hutool.core.date.DateUtil;
import com.xiaotu.service.sync.SyncXtIndexService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * @author zhangxiao
 * @create 2021-09-24 13:51
 */
@Component
@Slf4j
public class SyncXtIndexSchedule {

    @Autowired
    private SyncXtIndexService syncXtIndexService;

    /**
     * 每周星期天7点 同步电视剧
     *
     * @throws Exception
     */
    @Scheduled(cron = "0 0 7 ? * SUN")
    public void syncTvBasicData() throws Exception {
        log.info("<<<编剧指数任务1>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 开始：同步电视剧");
        syncXtIndexService.syncTvBasicData();
        log.info("<<<编剧指数任务1>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 结束：同步电视剧");
    }

    /**
     * 每周星期天7点10分 同步电影
     *
     * @throws Exception
     */
    @Scheduled(cron = "0 10 7 ? * SUN")
    public void syncMovieBasicData() throws Exception {
        log.info("<<<编剧指数任务2>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 开始：同步电影");
        syncXtIndexService.syncMovieBasicData();
        log.info("<<<编剧指数任务2>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 结束：同步电影");
    }

    /**
     * 每周星期天7点20分 同步网剧（电视剧，网剧）
     *
     * @throws Exception
     */
    @Scheduled(cron = "0 20 7 ? * SUN")
    public void syncNetTvBasicData() throws Exception {
        log.info("<<<编剧指数任务3>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 开始 同步网剧（电视剧，网剧）");
        syncXtIndexService.syncNetTvBasicData();
        log.info("<<<编剧指数任务3>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 结束 同步网剧（电视剧，网剧）");
    }

    /**
     * 每周星期天7点25分 同步网剧（热剧）（电视剧，网剧）
     *
     * @throws Exception
     */
    @Scheduled(cron = "0 25 7 ? * SUN")
    public void syncNetTvHotBasicData() throws Exception {
        log.info("<<<编剧指数任务4>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 开始 同步网剧（热剧）（电视剧，网剧）");
        syncXtIndexService.syncNetTvHotBasicData();
        log.info("<<<编剧指数任务4>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 结束 同步网剧（热剧）（电视剧，网剧）");
    }

    /**
     * 每周星期天7点30分 同步网大
     *
     * @throws Exception
     */
    @Scheduled(cron = "0 30 7 ? * SUN")
    public void syncNetMovieBasicData() throws Exception {
        log.info("<<<编剧指数任务5>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 开始：同步网大");
        syncXtIndexService.syncNetMovieBasicData();
        log.info("<<<编剧指数任务5>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 结束：同步网大");
    }

    /**
     * 每周星期天7点40分 同步豆瓣
     *
     * @throws Exception
     */
    @Scheduled(cron = "0 40 7 ? * SUN")
    public void syncDouBanBasicData() throws Exception {
        log.info("<<<编剧指数任务6>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 开始：同步豆瓣");
        syncXtIndexService.syncDouBanBasicData();
        log.info("<<<编剧指数任务6>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 结束：同步豆瓣");
    }

    /**
     * 每周星期天7点50分 同步编剧（电影作品数）
     *
     * @throws Exception
     */
    @Scheduled(cron = "0 50 7 ? * SUN")
    public void syncSwMovieWorksData() throws Exception {
        log.info("<<<编剧指数任务7>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 开始：同步编剧（电影作品数）");
        syncXtIndexService.syncSwMovieWorksData();
        log.info("<<<编剧指数任务7>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 结束：同步编剧（电影作品数）");
    }

    /**
     * 每周星期天8点 同步编剧（网大作品数）
     *
     * @throws Exception
     */
    @Scheduled(cron = "0 0 8 ? * SUN")
    public void syncSwNetMovieWorksData() throws Exception {
        log.info("<<<编剧指数任务8>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 开始：同步编剧（网大作品数）");
        syncXtIndexService.syncSwNetMovieWorksData();
        log.info("<<<编剧指数任务8>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 结束：同步编剧（网大作品数）");
    }

    /**
     * 每周星期天8点10分 执行编剧算法
     *
     * @throws Exception
     */
    @Scheduled(cron = "0 10 8 ? * SUN")
    public void screenwriterIindexAlgorithm() throws Exception {
        log.info("<<<编剧指数任务9>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 开始：执行编剧算法");
        syncXtIndexService.screenwriterIindexAlgorithm();
        log.info("<<<编剧指数任务9>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 结束：执行编剧算法");
    }

    /**
     * 每周星期天8点20分 执行热播编剧算法
     *
     * @throws Exception
     */
    @Scheduled(cron = "0 20 8 ? * SUN")
    public void hotScreenwriterIindexAlgorithm() throws Exception {
        log.info("<<<编剧指数任务10>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 开始：执行热播编剧算法");
        syncXtIndexService.hotScreenwriterIindexAlgorithm();
        log.info("<<<编剧指数任务10>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 结束：执行热播编剧算法");
    }

    /**
     * 每周星期天8点30分 同步编剧小土指数至 编剧数据库
     *
     * @throws Exception
     */
    @Scheduled(cron = "0 30 8 ? * SUN")
    public void syncSwIndex() {
        log.info("<<<编剧指数任务11>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 开始：同步编剧小土指数至 编剧数据库");
        syncXtIndexService.syncSwIndex();
        log.info("<<<编剧指数任务11>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 结束：同步编剧小土指数至 编剧数据库");
    }

    /**
     * 每周星期天8点40分 同步热播编剧小土指数至 编剧数据库
     *
     * @throws Exception
     */
    @Scheduled(cron = "0 40 8 ? * SUN")
    public void syncHotSwIndex() {
        log.info("<<<编剧指数任务12>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 开始：同步热播编剧小土指数至 编剧数据库");
        syncXtIndexService.syncHotSwIndex();
        log.info("<<<编剧指数任务12>>> 当前系统时间：" + DateUtil.formatDateTime(new Date()) + " 结束：同步热播编剧小土指数至 编剧数据库");
    }

}
